home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.2 Applications 1996 May / SGI IRIX 6.2 Applications 1996 May.iso / dist / impr_dev.idb / usr / impressario / src / libimp / impError.c.z / impError.c
C/C++ Source or Header  |  1996-05-06  |  5KB  |  205 lines

  1. /**************************************************************************
  2.  *
  3.  *           Copyright (c)    1993 Silicon Graphics, Inc.
  4.  *            All Rights Reserved
  5.  *
  6.  *       THIS    IS UNPUBLISHED PROPRIETARY SOURCE CODE OF SGI
  7.  *
  8.  * The copyright notice above does not evidence any actual of intended
  9.  * publication of such source code, and is an unpublished work by Silicon
  10.  * Graphics, Inc. This material contains CONFIDENTIAL INFORMATION that is
  11.  * the property of Silicon Graphics, Inc. Any use, duplication or
  12.  * disclosure not specifically authorized by Silicon Graphics is strictly
  13.  * prohibited.
  14.  *
  15.  * RESTRICTED RIGHTS LEGEND:
  16.  *
  17.  * Use, duplication or disclosure by the Government is subject to
  18.  * restrictions as set forth in subdivision (c)(1)(ii) of the Rights in
  19.  * Technical Data and Computer Software clause at DFARS 52.227-7013,
  20.  * and/or in similar or successor clauses in the FAR, DOD or NASA FAR
  21.  * Supplement. Unpublished - rights reserved under the Copyright Laws of
  22.  * the United States. Contractor is SILICON GRAPHICS, INC., 2011 N.
  23.  * Shoreline Blvd., Mountain View, CA 94039-7311
  24.  **************************************************************************
  25.  *
  26.  * File: impError.c
  27.  *
  28.  * Description: Error handling routines and error string table.
  29.  *
  30.  **************************************************************************/
  31.  
  32.  
  33. #ident "$Revision: 1.6 $"
  34.  
  35.  
  36. #include <stdio.h>
  37. #include <errno.h>
  38. #include <string.h>
  39. #include <unistd.h>
  40. #include "impI.h"
  41.  
  42.  
  43. /* Error message structure. Each entry contains a message catalog token
  44.  * and a default message.
  45.  */
  46.  
  47. typedef struct {
  48.     char *catToken;
  49.     char *defMsg;
  50. } ErrorMessage;
  51.  
  52.  
  53. /* Global error variables */
  54.  
  55. int IMPerrno;
  56.  
  57. /*
  58.  * Error string table. The error codes are indices into this table
  59.  * after IMP_ERR_BASE has been subtracted from the code.
  60.  */
  61.  
  62. static ErrorMessage errorTable[] = {
  63.     /* 0 */        {
  64.             _SGI_LIBIMP_ERR_READWRITE,
  65.             "read/write mode not supported"
  66.             },
  67.     /* 1 */        {
  68.             _SGI_LIBIMP_ERR_MEMALLOC,
  69.             "could not allocate memory"
  70.             },
  71.     /* 2 */        {
  72.             _SGI_LIBIMP_ERR_BADMAGIC,
  73.             "bad magic number - file may not be image file"
  74.             },
  75.     /* 3 */        {
  76.             _SGI_LIBIMP_ERR_BADRASTER,
  77.             "unreconized raster encoding"
  78.             },
  79.     /* 4 */        {
  80.             _SGI_LIBIMP_ERR_BADIMAGE,
  81.             "unreconized image type"
  82.             },
  83.     /* 5 */        {
  84.             _SGI_LIBIMP_ERR_BADROW,
  85.             "row or channel number out of range"
  86.             },
  87.     /* 6 */        {
  88.             _SGI_LIBIMP_ERR_BADDIM,
  89.             "image dimension out of range"
  90.             },
  91.     /* 7 */        {
  92.             _SGI_LIBIMP_ERR_READFLAG,
  93.             "image not opened for reading"
  94.             },
  95.     /* 8 */        {
  96.             _SGI_LIBIMP_ERR_BADBPP,
  97.             "unsupported bytes per pixel value"
  98.             },
  99.     /* 9 */        {
  100.             _SGI_LIBIMP_ERR_WRITEFLAG,
  101.             "image not opened for writing"
  102.             },
  103.     /* 10 */    {
  104.             _SGI_LIBIMP_ERR_READROW,
  105.             "read row function failed"
  106.             },
  107.     /* 11 */    {
  108.             _SGI_LIBIMP_ERR_SHORTREAD,
  109.             "less data read than expected"
  110.             },
  111.     /* 12 */    {
  112.             _SGI_LIBIMP_ERR_SHORTWRITE,
  113.             "unable to write all data"
  114.             },
  115.     /* 13 */    {
  116.             _SGI_LIBIMP_ERR_BADFD,
  117.             "invalid file descriptor"
  118.             },
  119.     /* 14 */    {
  120.             _SGI_LIBIMP_ERR_SEEK,
  121.             "cannot seek on file descriptor"
  122.             },
  123.     /* 15 */    {
  124.             _SGI_LIBIMP_ERR_NOWRITE,
  125.             "write mode not allowed"
  126.             },
  127. };
  128. static int nerr = sizeof(errorTable)/sizeof(ErrorMessage);
  129.     
  130.  
  131. /**************************************************************************
  132.  *
  133.  * Function: impPerror
  134.  *
  135.  * Description: Similar to the C function perror, this function produces
  136.  *      a message on the standard error output, describing the last error
  137.  *      encountered during an IMP function call. The arguement s is printed
  138.  *      first, then a colon and a blank, then the error message and a
  139.  *      new-line. If s="" then the colon and blank are not printed.
  140.  *
  141.  *      The function uses the global variable IMPerrno as an index into 
  142.  *      the error stringu table. The values for IMPerrno are contained in
  143.  *    imp.h.
  144.  *
  145.  * Parameters: 
  146.  *      str (I) - User supplied error string to prepend on the error string
  147.  *
  148.  * Return: none
  149.  *
  150.  **************************************************************************/
  151.  
  152. void impPerror(const char *str)
  153. {
  154.     if (str && strlen(str)) {
  155.     (void)fprintf(stderr, "%s: %s\n", str, impErrorString(IMPerrno));
  156.     } else {
  157.     (void)fprintf(stderr, "%s\n", impErrorString(IMPerrno));
  158.     }
  159. }
  160.  
  161.  
  162. /**************************************************************************
  163.  *
  164.  * Function: impErrorString
  165.  *
  166.  * Description: Returns a pointer to the error string that corresponds
  167.  *    to the current value of the specified error variable. Note
  168.  *    that we look in both the system error string table and our own
  169.  *    depending on that value of the error variable.
  170.  *
  171.  * Parameters: 
  172.  *    errCode (I) - error code
  173.  *
  174.  * Return: Pointer to error string table. This pointer is to static
  175.  *    storage and should not be freed.
  176.  *
  177.  **************************************************************************/
  178.  
  179. char* impErrorString(int errCode)
  180. {
  181.     static char buf[128];
  182.     register int errInd;
  183.  
  184.     /*
  185.      * First check whether this is a system (i.e. errno) error code
  186.      */
  187.     if (errCode <= LASTERRNO)
  188.     return strerror(errCode);
  189.  
  190.     /*
  191.      * Check if it is a valid IMP error code
  192.      */
  193.     errInd = errCode - IMP_ERR_BASE;
  194.     if (errInd >= 0 && errInd < nerr)
  195.     return gettxt(errorTable[errInd].catToken, errorTable[errInd].defMsg);
  196.  
  197.     /*
  198.      * Don't know what it is
  199.      */
  200.     (void)sprintf(buf, gettxt(_SGI_LIBIMP_UNKNOWN_ERROR, "error code %d"),
  201.                                 errCode);
  202.     return buf;
  203. }
  204.  
  205.